/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloAlumno;
import com.ipartek.formacion.gestformwww.modelo.ModeloEmpresa;
import com.ipartek.formacion.gestformwww.modelo.ModeloProcedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.Alumno;
import com.ipartek.formacion.gestformwww.modelo.beans.Empresa;
import com.ipartek.formacion.gestformwww.modelo.beans.Procedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Victor y Karmele
 */
public class CrearAlumnoAccion implements Accion {

    /**
     * Descripción: ejecuta la acción de creado del alumno
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
   
    private final String visualizarasignar = "crear-asignar-alumno-accion";
    private final String visualizaralumno = "visualizar-alumno-accion";

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
          AccionServlet as=(AccionServlet) servlet;
        HttpSession sesion = request.getSession();
        ModeloAlumno modelo = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        Alumno alumno = new Alumno();
        ArrayList<String> errores = null;
        int id = 0;
        ArrayList<String> mensajes = new ArrayList<String>();
        ArrayList erroresEmpresa = new ArrayList();
        ArrayList erroresProcedencia = new ArrayList();
        Boolean crearAlumno = Verificador.sinReenvio("aleatorioCrearAlumno", sesion, request);
        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            if (request.getMethod().equalsIgnoreCase("POST")) {
                // <editor-fold defaultstate="collapsed" desc="Rellena el bean de alumno">
                alumno.setAluNIF(request.getParameter("aluNIF"));
                alumno.setAluNSS(request.getParameter("aluNSS"));
                alumno.setAluNom(request.getParameter("aluNom"));
                alumno.setAluApe1(request.getParameter("aluApe1"));
                alumno.setAluApe2(request.getParameter("aluApe2"));
                alumno.setAluDir(request.getParameter("aluDir"));
                alumno.setAluLocalidad(request.getParameter("aluLocalidad"));
                alumno.setAluFechNac(request.getParameter("aluFechNac"));
                alumno.setAluTlf1(request.getParameter("aluTlf1"));
                alumno.setAluTlf2(request.getParameter("aluTlf2"));
                alumno.setAluMail(request.getParameter("aluMail"));
                alumno.setAluFechNac(request.getParameter("aluFechNac"));
                alumno.setAluObserv(request.getParameter("aluObserv"));
                if (request.getParameter("empNom") != null && !request.getParameter("empNom").isEmpty()) {
                    String empNom = request.getParameter("empNom");
                    ModeloEmpresa mempresa = (ModeloEmpresa) servlet.getServletContext().getAttribute("ModeloEmpresa");
                    Empresa empresa = new Empresa();
                    empresa.setEmpNom(empNom);
                    erroresEmpresa = empresa.validar();
                    if (erroresEmpresa.isEmpty() && crearAlumno) {
                        try {
                            Integer idEmpresa = new Integer(mempresa.crearEmpresa(empresa));
                            alumno.setEmpId(idEmpresa);
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                    }
                } else {
                    alumno.setEmpId(request.getParameter("empId"));
                }
                if (request.getParameter("idAlumno") != null && Verificador.numeroValido(request.getParameter("idAlumno"))) {
                    alumno.setAluId(Integer.parseInt(request.getParameter("idAlumno")));
                }
                if (request.getParameter("proNom") != null && !request.getParameter("proNom").isEmpty()) {
                    String proDescr = request.getParameter("proNom");
                    Procedencia pro = new Procedencia();
                    pro.setProDescr(proDescr);
                    ModeloProcedencia mprocedencia = (ModeloProcedencia) servlet.getServletContext().getAttribute("ModeloProcedencia");
                    erroresProcedencia = pro.validar();
                    if (erroresProcedencia.isEmpty() && crearAlumno) {
                        try {
                            Integer idProcedencia = mprocedencia.crearProcedencia(pro);
                            alumno.setProId(idProcedencia);
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }
                    }
                } else {
                    alumno.setProId(request.getParameter("proId"));
                }// </editor-fold>
                errores = alumno.validar();
                errores.addAll(erroresEmpresa);
                errores.addAll(erroresProcedencia);

                if(Verificador.numeroValido(request.getParameter("modificacionCrear"))){
                    alumno.setAluId(Integer.parseInt(request.getParameter("modificacionCrear")));
                }

                if (errores.isEmpty() && alumno.getAluId()!=null){
                    try{
                        modelo.modificarAlumno(alumno);
                        mensajes.add("mensaje-modificar-alumno");
                        sesion.setAttribute("mensajes", mensajes);
                        request.setAttribute("Alumno", alumno);
                        if(Verificador.numeroValido(request.getParameter("modificacionCrear"))){
                            try {
                                router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InstantiationException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            }
                       
                        }else{
                            try {
                                router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumno),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                            } catch (ClassNotFoundException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (InstantiationException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            } catch (IllegalAccessException ex) {
                                Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            }
                        }
                        
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        request.setAttribute("Alumno", alumno);
                        sesion.setAttribute("excepciones", ex.getMessage());
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumno),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex1) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (InstantiationException ex1) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        } catch (IllegalAccessException ex1) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex1);
                        }
                      
                    }

                }else if (errores.isEmpty()&& crearAlumno) {
                    
                    try {
                        id = modelo.crearAlumno(alumno);
                        mensajes.add("mensaje-guardar-alumno");
                        sesion.setAttribute("mensajes", mensajes);
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        request.setAttribute("Alumno", alumno);
                        sesion.setAttribute("excepciones", ex.getMessage());
                        if(ex.getObjetoExcepcion()!=null){
                            request.setAttribute("alumnoAnterior", (Alumno)(ex.getObjetoExcepcion()));
                        }
                    }
                    try {
                        router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                   
                } else {
                    request.setAttribute("Alumno", alumno);
                    request.setAttribute("errores", errores);
                    if (request.getParameter("idAlumno")!=null){
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizaralumno),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                  
                    }else{
                        try {
                            router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    
                    }
                }
                
            } else {
                try {
                    //Ha mandado petición por GET
                    router=as.getFactory().getAction(as.getNombreClaseRecurso(visualizarasignar),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(CrearAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            
            }
        }
        return router;
    }

  
}
